package com.jic.product.controller.store;

import com.alibaba.fastjson.JSONObject;
import com.jic.common.base.vo.PageResult;
import com.jic.common.base.vo.RestResult;
import com.jic.product.constant.consist.ResponseCode;
import com.jic.product.model.entity.MStoreVirtualBalance;
import com.jic.product.model.vo.request.MStoreVirtualBalanceRequest;
import com.jic.product.model.vo.response.MStoreVirtualBalanceResponse;
import com.jic.product.service.MStoreVirtualBalanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;
/**
 * @Author: 建投数据科技(山东)有限公司 
 * @date: 2020-04-27 22:00:56
 */
 @RestController
 @Slf4j
 @RequestMapping("/mStoreVirtualBalance")
 @Api(tags = " [虚拟仓库台账表]控制类-PC")
public class MStoreVirtualBalanceController {
	@Autowired
	private MStoreVirtualBalanceService service;

	/**
	 * 新增记录
	 * @param request 新增[虚拟仓库台账表]请求参数
	 * @return MStoreVirtualBalanceResponse 新增[虚拟仓库台账表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "新增[虚拟仓库台账表]记录")
	@PostMapping("/save")
	@ResponseBody
	public RestResult<Long> save(@RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request,mStoreVirtualBalance);
		long flag = service.save(mStoreVirtualBalance);
	 return RestResult.success(flag);
	}

	/**
	 * 新增或修改记录
	 * @param request 新增或修改[虚拟仓库台账表]请求参数
	 * @return MStoreVirtualBalanceResponse 新增或修改[虚拟仓库台账表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "保存或更新[虚拟仓库台账表]")
	@PostMapping("/saveOrUpdate")
	 @ResponseBody
	public RestResult<Long> saveOrUpdate(@Validated @RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request,mStoreVirtualBalance);
		long flag =   service.saveOrUpdate(mStoreVirtualBalance);
	 return RestResult.success(flag);
	}
	/**
	 * 删除记录
	 * @param request 删除[虚拟仓库台账表]请求参数
	 * @return MStoreVirtualBalanceResponse 删除[虚拟仓库台账表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "删除[虚拟仓库台账表]记录")
	@PostMapping("/delete")
	@ResponseBody
	public RestResult<Long> delete(@RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request,mStoreVirtualBalance);
		long flag = service.deleteByPrimaryKeyLogically(mStoreVirtualBalance);
	 return RestResult.success(flag);
	}
	/**
	 * 修改记录
	 * @param request 修改[虚拟仓库台账表]请求参数
	 * @return MStoreVirtualBalanceResponse 修改[虚拟仓库台账表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "修改[虚拟仓库台账表]记录")
	@PostMapping("/update")
	@ResponseBody
	public RestResult<Long> update(@RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request, mStoreVirtualBalance);
		long flag = service.updateByPrimaryKeySelective(mStoreVirtualBalance);
	 return RestResult.success(flag);
	}
	/**
	 * 单表查询详情信息
	 * @param request 查询[虚拟仓库台账表]详情请求参数
	 * @return MStoreVirtualBalanceResponse 查询[虚拟仓库台账表]详情响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	 @PostMapping("/getByPrimaryKey")
	 @ApiOperation(value = "查询[虚拟仓库台账表]详情")
	 @ResponseBody
	public RestResult<MStoreVirtualBalanceResponse> getByPrimaryKey(@Validated  @RequestBody MStoreVirtualBalanceRequest request) {
		log.info("查询详情请求参数入参，{}", JSONObject.toJSONString(request));
		if (request!=null && request.getId()!=null) {

			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request, mStoreVirtualBalance);
			MStoreVirtualBalance result = service.getByPrimaryKey(mStoreVirtualBalance);
			log.info("查询详情请求参数出参，{}", JSONObject.toJSONString(result));
			if (result == null) {
				return RestResult.error(ResponseCode.EXCEPTION, "记录不存在");
			}
			MStoreVirtualBalanceResponse bo = new MStoreVirtualBalanceResponse();
			BeanUtils.copyProperties(result, bo);
			return RestResult.success(bo);
		}
		log.info("查询详情请求结束");
		return RestResult.success(null);
	}
	 /**
		 * 分页查询
		*
		* @param request 分页查询请求参数
		* @return 分页列表
		  * @throws Throwable 业务异常和系统异常
		 */
	@PostMapping("/listPage")
	@ApiOperation(value = " 分页查询列表 ")
	@ResponseBody
	public RestResult<PageResult<MStoreVirtualBalanceResponse>> listPage (@RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
	// MStoreVirtualBalance param = new MStoreVirtualBalance();
	// BeanUtils.copyProperties(request, param);
	return RestResult.success(service.listPageBySelective(request, request.getPageNum(),request.getPageSize()));
	}

	/**
		 * M_STORE_VIRTUAL_BALANCE 查询列表（不分页）
		 * @param  request 前端请求参数
	 */
	 @PostMapping("/listAll")
	 @ApiOperation(value = "不分页查询 [虚拟仓库台账表] ")
	 @ResponseBody
	 public RestResult<List<MStoreVirtualBalanceResponse>>  listMStoreVirtualBalanceAllRecord(@RequestBody MStoreVirtualBalanceRequest request) throws Throwable {
			MStoreVirtualBalance mStoreVirtualBalance = new MStoreVirtualBalance();
			BeanUtils.copyProperties(request, mStoreVirtualBalance);
			List<MStoreVirtualBalance> list = service.listAllRecord(mStoreVirtualBalance);
				List<MStoreVirtualBalanceResponse> responseList = list.stream().map(temp -> {
				MStoreVirtualBalanceResponse bo = new MStoreVirtualBalanceResponse();
				BeanUtils.copyProperties(temp, bo);
				return bo;
				}).filter(item -> item != null).collect(Collectors.toList());
			return RestResult.success(responseList);
	}

}

